<html>
  <head>
    <script>
        if (window.testRunner)
            testRunner.dumpAsText();

        function getInput()
        {
            return document.getElementById('inputId');
        }

        var DEFAULT_LINE_1 = "line\t(1 of 2)\r\nline\t(2 of 2)";
        var EXPECTED_LINE_1 = "line\t(1 of 2) line\t(2 of 2)";

        var DEFAULT_LINE_2 = "null\0char";
        var EXPECTED_LINE_2 = "null\0char";

        var DEFAULT_LINE_3 = "line with trailing newlines\r\n\r\n";
        var EXPECTED_LINE_3 = "line with trailing newlines";

        var TEST_NAME_1 = "Multi-line test";
        var TEST_NAME_2 = "Null char test";
        var TEST_NAME_3 = "Trailing newline test";

        function testMultiline()
        {
          log(TEST_NAME_1 + ":");
          testInputField(DEFAULT_LINE_1, EXPECTED_LINE_1);

          log(TEST_NAME_2 + ":");
          testInputField(DEFAULT_LINE_2, EXPECTED_LINE_2);

          log(TEST_NAME_3 + ":");
          testInputField(DEFAULT_LINE_3, EXPECTED_LINE_3);
        }

        function testInputField(input_value, expected)
        {
            var input = getInput();
            input.focus();
            document.execCommand("SelectAll", false, null);
            document.execCommand("InsertText", false, input_value);
            var str = jsEscape(input.value);
            if (str == jsEscape(expected))
                log("PASS");
            else
                log("FAIL: " + str);
        }

        function log(str) {
            var valueField = document.getElementById('console');
            valueField.appendChild(document.createTextNode(str));
            valueField.appendChild(document.createElement("br"));
        }

        function jsEscape(s)
        {
            // Partial
            var replacements = [
                ["\r", "\\r"],
                ["\n", "\\n"],
                ["\t", "\\t"],
                ["\f", "\\f"],
                ["\t", "\\t"],
                ["\0", "\\0"]
            ];

            for (var i = 0; i < replacements.length; ++i) {
                var r = replacements[i];
                s = s.replace(r[0], r[1]);
            }
            return s;
        }
    </script>
    <style>
        .pass { color: green; }
        .fail { color: red; }
        .code { font-family: monospace; }
    </style>
  </head>
  <body onload="testMultiline()">
    <h2>Test: This test verifies that text inputs will accept multiple lines of pasted text.  You should see three tests "PASS" below.</h2>
    <input id=inputId size=60 /><br>
    <span class=code id=console></span>
  </body>
</html>
